This is approximately the outline I use for a 3-day TDD course. I've used this outline in Java, C# and C++. How far I get depends on the students and the language. The flow can vary based on where the students want to go, their experience, etc.
Day 1
Basic TDD
Use Rpn Calculator to teach basic TDD
Create: plus, minus, factorial
Observe feature envy and fix by creating Operand Stack
Observe violation of OCP based on calculator interface and fix
Observe violation of SRP based on evaluation:
Introduce strategy
Introduce factory
Day 2
Observe violation of DRY and fix by introducing ABC + template method pattern
Use spy classes to build ABC without creating concrete subclasses
Update plus/minus to use
Have them create the following additional "operators"
Sum of all elements on operand stack
Prime factors
Introduce composite pattern, sum of prime factors, prime factors of sum
General pattern discussion
Everything is about polymorphism
Compare and contract
Design of pattern versus its intent
Discuss specific patterns students ask about
Clean Code
Change the structure of supplied code (and unit tests) - I could follow my colleague Bob Koss and do this first
Demonstrate refactoring after the students have done so
Discuss characterization tests
Discuss code smell: switch
Demonstrate refactoring to polymorphism/strategy pattern
Day 3
New problem (sometimes I intersperse this one with the sum of the stack and prime factors above): logging in
Introduce a mocking library (Rhino Mock for .Net and JMock 2 for Java - hand-rolled for C++).
Implement enough of this to discuss complexity of logic
Introduction
This is approximately the outline I use for a 3-day TDD course. I've used this outline in Java, C# and C++. How far I get depends on the students and the language. The flow can vary based on where the students want to go, their experience, etc.Day 1
Day 2
Day 3